#include <stdio.h>
#include "myStdio.h"

int main()
{
    FILE_* fp = fopen_("./log.txt", "w");
    if(fp == NULL)
    {
        return 1;
    }

    // 进程运行中的10s，log.txt文件中什么都没有，当进程退出后，行刷新，写入内容到log.txt中
//    const char* msg = "hello world!";    
//    int cnt = 10;
//    while(cnt)
//    {
//        fwrite_(msg, strlen(msg), fp);
//        sleep(1);
//
//        printf("cnt: %d\n", cnt--);
//    }

    // 进程运行中的10s，每写入一次，就刷新一次
    //const char* msg = "hello world!\n";    
    //int cnt = 10;
    //while(cnt)
    //{
    //    fwrite_(msg, strlen(msg), fp);
    //    sleep(1);

    //    printf("cnt: %d\n", cnt--);
    //}

    // 三个三个的输出 
    //const char* msg = "hello world! ";    
    //int cnt = 10;
    //while(cnt)
    //{
    //    fwrite_(msg, strlen(msg), fp);
    //    sleep(1);

    //    printf("cnt: %d\n", cnt--);

    //    if(cnt == 5)
    //        fflush_(fp);
    //}
    
    
    const char* msg = "hello world! ";    
    int cnt = 10;
    while(cnt)
    {
        fwrite_(msg, strlen(msg), fp);
        fflush_(fp);
        sleep(1);

        printf("cnt: %d\n", cnt--);
    }


    fclose_(fp);

    // 我们实现的行刷新，实际并不是将我们写的缓冲区内的数据直接写入到log.txt中，而是先写入到操作系统内文件（struct file）对应的内核缓冲区中。而从这个缓冲区写入到磁盘中（如log.txt）是由操作系统自主决定的！这意味着不一定会按照用户自己设计的行缓冲等来执行。

    return 0;
}
